home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / GameCreators / Inform / examples / Adventureland.inf < prev    next >
Encoding:
Text File  |  1997-03-15  |  29.3 KB  |  874 lines

  1. ! ----------------------------------------------------------------------------
  2. !  Adventureland 961111             One of the standard Inform 6 example games
  3. !
  4. !                                             Designed by Scott Adams: c. 1979
  5. !                                                   Ported to Inform: 16.10.94
  6. !                                                  Slightly corrected: 11.5.96
  7. !                    Modernised to Inform 6 and library 6/1 or later: 11.11.96
  8. ! ----------------------------------------------------------------------------
  9.  
  10. Constant Story "ADVENTURELAND";
  11. Constant Headline
  12.            "^An Interactive Classic by Scott Adams (circa 1979/80)^";
  13.  
  14. Release 1;
  15. Serial "961111";
  16.  
  17. Constant MAX_CARRIED = 6;
  18. Constant MAX_SCORE = 100;
  19.  
  20. Replace BurnSub;
  21.  
  22. Include "Parser";
  23. Include "VerbLib";
  24.  
  25. Global genie_gifts;
  26. Global dark_warning;
  27.  
  28. Class Treasure
  29.  with depositpoints 7,
  30.       after
  31.       [; Take: if (location==Inside_Stump) "Taken!";
  32.          Drop: if (location==Inside_Stump) "Safely deposited.";
  33.       ];
  34.  
  35. Class Sign
  36.  with name "sign",
  37.       short_name
  38.       [;  print "sign reads- ", (object) self; rtrue;
  39.       ],
  40.   has static;
  41.  
  42. Class ScottRoom
  43.  with initial
  44.       [;  give self ~visited;
  45.       ],
  46.       describe
  47.       [ i c d;  print (string) self.description;
  48.           print "^^Obvious exits: ";
  49.           for (i=n_to: i<=d_to: i++)
  50.               if (self.i ~= 0) c++;
  51.           if (c==0) print "none!";
  52.           else
  53.           {   for (i=n_to: i<=d_to: i++)
  54.                   if (self.i ~= 0)
  55.                   {   if (d++>0) print ", ";
  56.                       if (i==n_to) print "North";
  57.                       if (i==s_to) print "South";
  58.                       if (i==e_to) print "East";
  59.                       if (i==w_to) print "West";
  60.                       if (i==u_to) print "Up";
  61.                       if (i==d_to) print "Down";
  62.                   }
  63.               print ".";
  64.           }
  65.           new_line;
  66.           c=0; d=0;
  67.           objectloop (i in self)
  68.               if (i ~= player) { c++; give i concealed; }
  69.           if (c==0) rtrue;
  70.           print "^You can also see: ";
  71.           objectloop (i in self)
  72.               if (i ~= player)
  73.               {   if (d++>0) print " - "; PrintShortName(i);
  74.               }
  75.           new_line; rtrue;
  76.       ];
  77.  
  78. [ GamePreRoutine i c d;
  79.    if (action~=##Inv) rfalse;
  80.    c=0; d=0;
  81.    objectloop (i in player) c++;
  82.    if (c==0) "You're carrying nothing.";
  83.    print "You're carrying:^";
  84.    objectloop (i in player)
  85.    {   if (d++>0) print " - "; PrintShortName(i);
  86.    }
  87.    new_line; rtrue;
  88. ];
  89.  
  90. [ GamePostRoutine i;
  91.     if (action==##Look)
  92.         objectloop (i in location)
  93.             if (i ~= player && i has concealed)
  94.                 give i ~concealed;
  95.     rfalse;
  96. ];
  97.  
  98. ! ----------------------------------------------------------------------------
  99. !   Into Adventureland...
  100. ! ----------------------------------------------------------------------------
  101.  
  102. ScottRoom Lake_Shore "Lakeside"
  103.   with description "You're on the shore of a lake.",
  104.        n_to Forest,  s_to Lake_Shore,  w_to Dismal_Swamp,
  105.        d_to Quicksand,
  106.        before
  107.        [;  Swim: "Below you and before the lake is quicksand.";
  108.        ],
  109.   has  light;
  110. Object -> water "water"
  111.   with name "water", article "some",
  112.        before
  113.        [; Drink: "Boy, that really hit the spot.";
  114.           Take: if (bottle notin player)
  115.                     "You have nothing in which to carry the water.";
  116.                 <<Fill bottle>>;
  117.           Insert: if (second == bottle) <<Fill bottle>>;
  118.                     "You have nothing in which to carry the water.";
  119.           Receive: if (noun == bottle) <<Fill bottle>>;
  120.                 remove noun; CDefArt(noun); " washes away into the lake.";
  121.        ],
  122.   has  scenery;
  123. Treasure -> "*GOLDEN FISH*"
  124.   with name "gold" "golden" "fish",
  125.        each_turn
  126.        [;  if (self notin player) rfalse;
  127.            if (net notin player && random(100) <= 75)
  128.            {   move self to Lake_Shore;
  129.                "^The fish escape back to the lake.";
  130.            }
  131.            if ((water_in_the_bottle notin bottle
  132.                 || bottle notin player) && random(100)<=50)
  133.            {   remove self; move dead_fish to player;
  134.                "^Too dry. Fish die.";
  135.            }
  136.        ];
  137. Object -> axe "rusty axe (magic word- BUNYON -on it)"
  138.   with name "rusty" "axe",
  139.        description "The magic word BUNYON is written on the haft.";
  140. Sign -> "NO SWIMMING ALLOWED";
  141. Object dead_fish "dead fish"
  142.   with name "dead" "fish"
  143.   has  edible;
  144.  
  145. ScottRoom Quicksand "Bog"
  146.   with description "You're in a quick-sand bog.",
  147.        before
  148.        [;  Swim: if (child(player)==nothing)
  149.                  {   PlayerTo(Lake_Shore); rtrue; }
  150.                  "Something's too heavy.";
  151.        ],
  152.   has  light;
  153. Treasure -> ox "*SMALL STATUE OF A BLUE OX*"
  154.   with name "ox" "blue" "small" "statue";
  155.  
  156. ScottRoom Forest "Forest"
  157.   with description "You're in a forest.",
  158.        n_to Forest,  s_to Forest,  e_to Sunny_Meadow,  w_to Forest,
  159.        u_to trees
  160.   has  light;
  161. Object -> trees "trees"
  162.   with name "tree" "trees",
  163.        before
  164.        [;   Climb: <<Enter self>>;
  165.        ],
  166.        door_to Up_Oak, door_dir u_to
  167.   has  open door static;
  168.  
  169. ScottRoom Up_Oak "Branch"
  170.   with description "You're in a branch on the top of an old oak tree.^
  171.                     To the east you see a meadow beyond a lake.",
  172.        d_to Forest,  
  173.   has  light;
  174.  
  175. ScottRoom Sunny_Meadow "Meadow"
  176.   with description "You're in a sunny meadow.",
  177.        n_to Lake_Shore,  s_to Dismal_Swamp,  e_to Lake_Shore,
  178.        w_to Forest,
  179.   has  light;
  180. Object -> dragon "sleeping Dragon"
  181.   with name "dragon" "sleeping" "sleepy",
  182.        before
  183.        [;  WakeOther: deadflag=1; "The dragon wakes!";
  184.        ],
  185.        life
  186.        [;  Order, Answer, Ask: "Shh! You don't want to wake the dragon.";
  187.            Give:    "The dragon is too drowsy to notice.";
  188.            ThrowAt: if (noun==axe) 
  189.                     {   move axe to location; "The dragon isn't bothered."; }
  190.        ],
  191.        each_turn
  192.        [;  if (mud in location && random(100)<=50)
  193.            {   deadflag=1;
  194.                "Dragon smells something - awakens - attacks you!";
  195.            }
  196.        ],
  197.   has  animate;
  198. Sign -> "IN SOME CASES MUD IS GOOD, IN OTHERS...";
  199. Treasure eggs "*DRAGON EGGS* (very rare)"
  200.   with name "dragon" "eggs" "very" "rare", depositpoints 12;
  201. Object gore "smoking hole - pieces of dragon and gore"
  202.   with name "gore" "hole" "dragon" "smoking"
  203.   has  static;
  204.  
  205. ScottRoom Hidden_Grove "Grove"
  206.   with description "You're in a hidden grove.",
  207.        n_to Forest,  e_to Dismal_Swamp,  w_to Forest,  
  208.   has  light;
  209. Treasure -> "*JEWELLED FRUIT*"
  210.   with name "jewelled" "jewel" "fruit",
  211.        after
  212.        [;  Eat: "Boy that really hit the spot!"; ],
  213.   has  edible;
  214. Sign -> "PAUL'S PLACE";
  215.  
  216. ScottRoom Dismal_Swamp "Dismal Swamp"
  217.   with description "You're in a dismal swamp.",
  218.        n_to Sunny_Meadow,  s_to Dismal_Swamp,  e_to Dismal_Swamp,
  219.        w_to Hidden_Grove,  in_to 0,            u_to cypress_tree
  220.   has  light;
  221. Object -> cypress_tree "cypress tree"
  222.   with name "cypress" "tree",
  223.        before
  224.        [;   Climb: <<Enter self>>;
  225.             Cut:    if (axe notin player) rfalse;
  226.                     remove self; move tree_remains to Dismal_Swamp;
  227.                     Dismal_Swamp.in_to = tree_remains;
  228.                     Dismal_Swamp.u_to = 0;
  229.                     print "TIMBER..";
  230.                     if (keys in Tree_Top)
  231.                     {   remove keys;
  232.                         ". Something fell from the treetop and vanished!";
  233.                     }
  234.                     ".";
  235.        ],
  236.        door_to Tree_Top, door_dir u_to
  237.   has  open door static;     
  238.  
  239. Object -> mud "evil smelling mud"
  240.   with name "evil" "smelling" "mud", article "some",
  241.        after
  242.        [ f; Take:
  243.                 if (infected_bites in player) { remove infected_bites; f=1; }
  244.                 if (chigger_bites in player)  { remove chigger_bites; f=1; }
  245.                 if (f==1) "Boy that really hit the spot!";
  246.        ],
  247.        each_turn
  248.        [;  if (self notin player) rtrue;
  249.            if (random(100)<=5 &&
  250.                (bottle notin player || water_in_the_bottle notin bottle))
  251.            {   move self to Dismal_Swamp;
  252.                "The mud dried up and fell off.";
  253.            }
  254.        ];
  255.  
  256. Object -> gas "swamp gas"
  257.   with name "swamp" "gas", article "some",
  258.        before
  259.        [;  Take:
  260.                if (distended_bladder in player) "Bladder full already.";
  261.                if (wine_bladder notin player) "You have nothing suitable.";
  262.                <<Insert self wine_bladder>>;
  263.            Insert:
  264.                if (second == distended_bladder) "The bladder's full.";
  265.                if (second ~= wine_bladder)
  266.                    "That won't hold gas.";
  267.                move distended_bladder to player; remove wine_bladder;
  268.                itobj = distended_bladder;
  269.                "The bladder distends with swamp gas.";
  270.        ],
  271.   has  static;
  272. Object -> slime "floating patch of oily slime"
  273.   with name "patch" "oil" "slime" "oily",
  274.        before
  275.        [;  Take: brass_lantern.time_left=125; give brass_lantern general;
  276.                  remove self; move brass_lantern to player;
  277.                  "Magic oil attracts magic lamp. Lamp is now full.";
  278.        ],
  279.   has  static;
  280. Object -> chiggers "chiggers"
  281.   with name "chiggers", article "a swarm of",
  282.        daemon
  283.        [;  if (chigger_bites in player && mud notin player && random(100)<=10)
  284.            {   remove chigger_bites; move infected_bites to player;
  285.                "^Your chigger bites are now infected.";
  286.            }
  287.            if (infected_bites in player && random(100)<=8)
  288.            {   deadflag=1;
  289.                "^The bites have rotted your whole body.";
  290.            }
  291.            if (infected_bites notin player
  292.                && chigger_bites notin player
  293.                && slime in location && mud notin player
  294.                && random(100)<=5)
  295.            {   move chigger_bites to player;
  296.                "^You're bitten by chiggers.";
  297.            }
  298.            if (infected_bites notin player
  299.                && chigger_bites notin player
  300.                && chiggers in player
  301.                && random(100)<=30)
  302.            {   move chigger_bites to player;
  303.                "^You're bitten by chiggers.";
  304.            }
  305.        ];
  306. Object chigger_bites "chigger bites"
  307.   with name "chigger" "bites", article "some",
  308.        before [; "The bites are annoying. Perhaps medicine would help?"; ];
  309. Object infected_bites "infected chigger bites"
  310.   with name "chigger" "bites" "infected", article "some",
  311.        before [; "The bites are frightening. Get medicine!"; ];
  312.  
  313. Object tree_remains "hollow stump and remains of a felled tree"
  314.   with name "tree" "stump" "hollow" "remains",
  315.        door_to Inside_Stump, door_dir in_to
  316.   has  open door static;
  317.  
  318. ScottRoom Tree_Top "Tree Top"
  319.   with description "You're in the top of a tall cypress tree.",
  320.        d_to Dismal_Swamp,  
  321.   has  light;
  322.  
  323. Object -> "spider web with writing on it"
  324.   with name "spider" "web" "writing",
  325.        description "~CHOP IT DOWN!~",
  326.        before
  327.        [;  Take: deadflag=1; "You're bitten by a spider.";
  328.        ];
  329. Object -> keys "ring of skeleton keys"
  330.   with name "keys" "ring" "skeleton" "keyring";
  331.  
  332. ScottRoom Inside_Stump "Inside Stump"
  333.   with description "You're in a large hollow damp stump in the swamp.",
  334.        n_to Dismal_Swamp,  s_to Dismal_Swamp,  e_to Dismal_Swamp,
  335.        w_to Dismal_Swamp,  u_to Dismal_Swamp,  d_to Root_Chamber, 
  336.   has  light;
  337. Sign -> "LEAVE TREASURE HERE - (say 'SCORE')";
  338. Object -> bottle "the bottle"
  339.   with name "bottle" "jar" "flask",
  340.        short_name
  341.        [;  if (water_in_the_bottle in self) { print "bottle of water"; rtrue; }
  342.            if (bees in self) { print "bottle of bees"; rtrue; }
  343.            print "empty bottle"; rtrue;
  344.        ],
  345.        before
  346.        [ x; LetGo:
  347.              if (noun in bottle)
  348.                  "You're holding that already (in the bottle).";
  349.          Receive:
  350.              if (noun==water or bees) <<Fill self>>;
  351.              "That won't go in the bottle.";
  352.          Fill:
  353.              if (child(bottle)~=0)
  354.                "The bottle is full already.";
  355.              if (water in location)
  356.              {   move water_in_the_bottle to bottle;
  357.                  "The bottle is now full of water.";
  358.              }
  359.              if (bees in location)
  360.              {   move bees to bottle;
  361.                  "The bottle is now full of bees.";
  362.              }
  363.              "There is nothing here with which to fill the bottle.";
  364.          Empty: if (child(bottle)==0) "The bottle is already empty!";
  365.              x=child(bottle);
  366.              remove x;
  367.              if (x==bees)
  368.              {   move x to location; "You release the bees.";
  369.              }
  370.              "Your bottle is now empty and the ground is now wet.";
  371.        ],
  372.   has  container open;
  373.  
  374. Object -> brass_lantern "old fashioned lamp"
  375.   with name "lamp" "fashioned" "lamp", article "an",
  376.        power 125,
  377.        time_left 0,
  378.        daemon
  379.        [ t; if (self hasnt on) { StopDaemon(self); rtrue; }
  380.           t=--(self.power);
  381.           if (t==0) give self ~on ~light;
  382.           if (self in player or location)
  383.           {   if (t==0) "Your lamp has run out of power.";
  384.               if (t==30) "Your lamp is getting dim.";
  385.           }
  386.        ],
  387.        before
  388.        [; Examine: print "It is a shiny brass lamp";
  389.                 if (self hasnt on)
  390.                     ". It is not currently lit.";
  391.                 if (self.power < 30)
  392.                     ", glowing dimly.";
  393.                 ", glowing brightly.";
  394.           Burn: <<SwitchOn self>>;
  395.           Rub:  if (self has on) "No! It's too hot.";
  396.                 if (self hasnt general) "Nothing happens.";
  397.                 switch(++genie_gifts)
  398.                 {   1: move ring to location;
  399.                        "A glowing genie appears -
  400.                         drops something - then vanishes.";
  401.                     2: move bracelet to location;
  402.                        "A glowing genie appears -
  403.                         drops something - then vanishes.";
  404.                     3: if (ring in Inside_Stump)
  405.                            score=score-ring.depositpoints;
  406.                        remove ring; move player to Misty_Room;
  407.                        "A genie appears - says ~boy you're selfish~ - takes 
  408.                         something - then vanishes!";
  409.                     4: if (bracelet in Inside_Stump)
  410.                            score=score-bracelet.depositpoints;
  411.                        remove bracelet; move player to Misty_Room;
  412.                        "A genie appears - says ~boy you're selfish~ - takes 
  413.                         something - then vanishes!";
  414.                     default: "Nothing happens.";
  415.                 }
  416.           SwitchOn: if (self.power <= 0) "It's run out.";
  417.           Receive, Open:
  418.                 "You can't put things in the lamp.";
  419.        ],
  420.        after
  421.        [; SwitchOn: give self light; StartDaemon(self);
  422.               "Flameless lamp now on.";
  423.           SwitchOff: give self ~light;
  424.        ],
  425.   has  switchable;
  426.  
  427. Treasure ring "*DIAMOND RING*"
  428.   with name "diamond" "ring";
  429. Treasure bracelet "*DIAMOND BRACELET*"
  430.   with name "diamond" "bracelet";
  431.  
  432. Object water_in_the_bottle "bottled water" bottle
  433.   with name "bottled" "water" "h2o", article "some",
  434.        before
  435.        [; Drink:  remove water_in_the_bottle; <<Drink water>>;
  436.        ],
  437.        description "It looks like ordinary water to me.";
  438.  
  439. ScottRoom Root_Chamber "Root Chamber"
  440.   with description "You're in a root chamber under the stump.",
  441.        u_to Inside_Stump,  d_to dark_hole,  
  442.   has  light;
  443. Object -> dark_hole "dark hole"
  444.   with description "Leading below.",
  445.        door_dir d_to,
  446.        door_to Semidark_Hole
  447.   has  open door static;
  448. Treasure -> "*POT OF RUBIES*"
  449.   with name "pot" "of" "rubies";
  450.  
  451. ScottRoom Semidark_Hole "Hole"
  452.   with description "You're in a semi-dark hole by the root chamber.",
  453.        u_to Root_Chamber, d_to root_door
  454.   has  light;
  455. Object -> root_door "the door"
  456.   with name "door",
  457.        short_name
  458.        [;  if (self has locked) { print "locked door"; rtrue; }
  459.            if (self has open)
  460.            {   print "open door with a hallway beyond"; rtrue; }
  461.            print "closed door"; rtrue;
  462.        ],
  463.        before
  464.        [;  ThrowAt:
  465.                if (second==axe)
  466.                {   give self ~locked ~lockable ~openable open;
  467.                    "Lock shatters!";
  468.                }
  469.        ],
  470.        door_to Long_Hall, door_dir d_to, with_key keys
  471.   has  static door openable lockable locked;
  472.  
  473. ScottRoom Long_Hall "Hall"
  474.   with description "You're in a long down-sloping hall.",
  475.        u_to Semidark_Hole,  d_to Large_Cavern;
  476.  
  477. ScottRoom Large_Cavern "Cavern"
  478.   with description "You're in a large cavern.",
  479.        n_to Hive,  s_to Royal_Anteroom,  w_to Memory_RAM,
  480.        u_to Long_Hall,  d_to Maze1;
  481.  
  482. ScottRoom Hive "Octagonal Hive"
  483.   with description "You're in a large 8-sided room.",
  484.        s_to Large_Cavern;
  485. Treasure -> "*ROYAL HONEY*"
  486.   with name "royal" "honey", article "some",
  487.        before
  488.        [;  Take:
  489.                if (bees in location && mud notin player)
  490.                {   deadflag=1; "Bees sting you."; }
  491.            Drop:
  492.                if (bear in location)
  493.                {   remove self; give bear general;
  494.                    "The bear eats the honey and falls asleep.";
  495.                }
  496.        ],
  497.   has  edible;
  498. Object -> bees "large African bees"
  499.   with name "large" "african" "bees", article "a swarm of",
  500.        before
  501.        [;  Take:
  502.                if (mud notin player)
  503.                {   deadflag=1; "Bees sting you."; }
  504.                if (bottle in player) <<Fill bottle>>;
  505.                "You have nothing to carry the bees in.";
  506.            Drop:
  507.                if (self in bottle
  508.                    && dragon in location)
  509.                {   move self to location;
  510.                    move eggs to location; remove dragon;
  511.                    "The bees attack the dragon which gets up and flies away...";
  512.                }
  513.                if (self in bottle
  514.                    && bear in location)
  515.                {   move self to location;
  516.                    give bear ~general; deadflag=1;
  517.                    "Bees madden the bear. Bear then attacks you!";
  518.                }
  519.        ],
  520.        each_turn
  521.        [;  #IFNDEF DEBUG;
  522.            !  A completely unfair rule! And in the original the bees are lost.
  523.            if (self in bottle && random(100)<=8)
  524.            {   move self to Hive; "^The bees in the bottle all suffocated."; }
  525.            #ENDIF;
  526.            if (self in bottle) rfalse;
  527.            if (self in location && mud notin player && mud notin location &&
  528.                random(100)<=8)
  529.            {   deadflag=1; "Bees sting you."; }
  530.        ];
  531.  
  532. ScottRoom Royal_Anteroom "Anteroom"
  533.   with description "You're in a royal anteroom.",
  534.        n_to Large_Cavern,  u_to Royal_Chamber;
  535. Object -> wine_bladder "empty wine bladder"
  536.   with name "empty" "wine" "bladder",
  537.        before
  538.        [;  Fill: if (gas notin location)
  539.                      "The bladder could only just hold a vapour nowadays.";
  540.                  <<Insert gas self>>;
  541.        ];
  542. Object distended_bladder "distended gas bladder"
  543.   with name "distended" "gas" "bladder",
  544.        before
  545.        [;  Open: move wine_bladder to parent(self); remove self;
  546.                  "Gas dissipates!";
  547.        ];
  548.  
  549. ScottRoom Maze1 "Maze"
  550.   with description "You're in a maze of pits.",
  551.        n_to Maze2,  s_to Maze4,  e_to Maze4,  d_to Maze2;
  552.  
  553. ScottRoom Maze2 "Maze"
  554.   with description "You're in a maze of pits.",
  555.        w_to Maze3,  u_to Maze1;
  556. Object -> flint_and_steel "flint and steel"
  557.   with name "flint" "steel";
  558.  
  559. ScottRoom Maze3 "Maze"
  560.   with description "You're in a maze of pits.",
  561.        n_to Maze6,  s_to Maze1,  e_to Maze2,  w_to Maze5,
  562.        u_to Maze5,  d_to Maze6;
  563. Object -> "scratchings"
  564.   with name "scratchings", article "strange",
  565.        short_name "strange scratchings on rock reveals- ALADDIN WAS HERE",
  566.   has  static;
  567.  
  568. ScottRoom Maze4 "Maze"
  569.   with description "You're in a maze of pits.",
  570.        n_to Maze1,  e_to Maze2,  w_to Maze1,  u_to Maze2;
  571.  
  572. ScottRoom Maze5 "Maze"
  573.   with description "You're in a maze of pits.",
  574.        s_to Maze6,  u_to Maze3,  d_to Maze6;
  575.  
  576. ScottRoom Maze6 "Maze"
  577.   with description "You're in a maze of pits.",
  578.        n_to Maze6,  s_to Maze1,  e_to Maze1,  w_to Maze4,
  579.        u_to Maze3,  d_to Chasm_Bottom;
  580. Treasure -> rug "*THICK PERSIAN RUG*"
  581.   with name "thick" "persian" "rug" "carpet";
  582. Object -> "arrow pointing down"
  583.   with name "arrow"
  584.   has  static;
  585.  
  586. ScottRoom Chasm_Bottom "Chasm"
  587.   with description "You're in a bottom of a chasm. Above 2 ledges. 
  588.                     One has a bricked up window.",
  589.        u_to Maze6;
  590. Treasure -> net "*GOLDEN NET*"
  591.   with name "gold" "golden" "net";
  592. Sign -> "MAGIC WORD IS AWAY. X LA -(rest of sign is missing)";
  593. Object -> lava "the lava"
  594.   with name "stream" "of" "lava",
  595.        short_name
  596.        [;  print "stream of lava";
  597.            if (self has general) print " with a brick dam";
  598.            rtrue;
  599.        ],
  600.        description
  601.        [;  if (self hasnt general)
  602.              "There's something there all right! Maybe you should go there?";
  603.            "Just more dammed lava.";
  604.        ],
  605.        before
  606.        [;  Enter, Push, Pull, Take: "NO! It's too hot.";
  607.        ],
  608.   has  static;
  609. Treasure firestone "*FIRESTONE* (cold now)"
  610.   with name "firestone", depositpoints 11;
  611.  
  612. ScottRoom Narrow_Ledge_1 "Ledge"
  613.   with description "You're on a narrow ledge by a chasm. 
  614.                     Across the chasm is a throne room.",
  615.        before
  616.        [;  Jump: if (firebricks in player)
  617.                  {   deadflag=1; "Oh no! Something was too heavy!"; }
  618.                  print "You leap across the chasm...^";
  619.                  PlayerTo(Narrow_Ledge_2); rtrue;
  620.        ],
  621.        w_to Royal_Chamber;
  622.  
  623. ScottRoom Royal_Chamber "Royal Chamber"
  624.   with description "You're in the Royal Chamber.",
  625.        d_to Royal_Anteroom, e_to 0;
  626. Object -> bricked_window "bricked-up window"
  627.   with name "window" "bricked" "brick" "bricks"
  628.   has  static;
  629. Object holed_window "bricked up window with a hole in it - beyond is a ledge"
  630.   with name "window" "bricked" "hole" "ledge",
  631.        door_dir e_to, door_to Narrow_Ledge_1
  632.   has  static door open;
  633. Object firebricks "loose fire bricks"
  634.   with name "loose" "fire" "bricks", article "some",
  635.        after
  636.        [;  Take: "Taken. (Heavy!)";
  637.            Drop: if (location~=Chasm_Bottom) rfalse;
  638.                  remove self; give lava general;
  639.                  move firestone to location;
  640.                  "The bricks dam the lava, revealing a *FIRESTONE*!";
  641.        ];
  642.  
  643. ScottRoom Narrow_Ledge_2 "Ledge"
  644.   with description
  645.           "You're on a narrow ledge by the throne room-across chasm-ledge.",
  646.        before
  647.        [;  Sing:
  648.            if (bear in location && bear hasnt general)
  649.            {   move dead_bear to Chasm_Bottom;
  650.                remove bear;
  651.                "The bear got startled and fell off the ledge!";
  652.            }
  653.            Jump: print "You leap across the chasm...^";
  654.                  PlayerTo(Narrow_Ledge_1); rtrue;
  655.        ],
  656.        e_to
  657.        [;  if (bear in location && bear hasnt general)
  658.                "The bear won't let you!";
  659.            return Throne_Room;
  660.        ];
  661. Treasure -> mirror "*MAGIC MIRROR*"
  662.   with name "magic" "mirror",
  663.        side_up 0,
  664.        before
  665.        [;  Take:
  666.                if (bear in location && bear hasnt general)
  667.                    "The bear won't let you!";
  668.        ],
  669.        after
  670.        [;  Drop:
  671.              if (rug in location)
  672.              {   print "Mirror lands softly on the rug - lights up and says:^";
  673.                  self.side_up++;
  674.                  if (self.side_up % 2 == 1)
  675.                    "*DRAGON STINGS* and fades. I don't get it - hope you do.";
  676.                  "Don't waste *HONEY*. Get mad instead. Dam lava!";
  677.              }
  678.              remove self; move broken_glass to location;
  679.              "The mirror hits the floor and shatters into a million pieces!";
  680.        ];
  681. Object -> bear "the bear"
  682.   with name "thin" "black" "bear",
  683.        short_name
  684.        [;  if (self has general) { print "sleeping bear"; rtrue; }
  685.            print "thin black bear"; rtrue;
  686.        ],
  687.        before
  688.        [;  WakeOther: give self ~general; "The bear rouses!^";
  689.        ],
  690.        life
  691.        [;  Ask, Order, Answer: <<Sing>>;
  692.            Attack, ThrowAt:
  693.                if (self has general) <WakeOther self>;
  694.                remove mirror; move broken_glass to location;
  695.                "Oh no...Bear dodges...CRASH!";
  696.        ],
  697.   has  animate;
  698. Object broken_glass "broken glass"
  699.   with name "broken" "glass" "jagged" "fragments", article "some";
  700. Object dead_bear "dead bear"
  701.   with name "dead" "bear" "black" "thin"
  702.   has  static;
  703.  
  704. ScottRoom Throne_Room "Throne Room"
  705.   with description "You're in a throne room.",
  706.        w_to Narrow_Ledge_2;
  707. Treasure -> "*GOLD CROWN*"
  708.   with name "gold" "golden" "crown";
  709.  
  710. ScottRoom Real_Trouble "Trouble!"
  711.   with description
  712.            "I think you're in real trouble. Here's a guy with a pitchfork!^^
  713.             You lost *ALL* treasures.",
  714.        initial
  715.        [;  deadflag=3;
  716.        ],
  717.   has  light;
  718.  
  719. ScottRoom Memory_RAM "Ugly Place"
  720.   with description
  721.           "You're in the memory RAM of an IBM-PC. You took a wrong turn!",
  722.        e_to Large_Cavern,  
  723.   has  light;
  724. Sign -> "To the Architects - TSURRIS";
  725.  
  726. ScottRoom Misty_Room "Misty Room"
  727.   with description "You're in a large misty room with strange letters
  728.                     over the exits.",
  729.        s_to Real_Trouble,  e_to Forest,  w_to Real_Trouble,
  730.        u_to Up_Oak,  d_to Real_Trouble,  
  731.   has  light;
  732. Sign -> "LIMBO. FIND RIGHT EXIT AND LIVE AGAIN!";
  733.  
  734. ! ----------------------------------------------------------------------------
  735. !   A soupcon of code
  736. ! ----------------------------------------------------------------------------
  737.  
  738. [ Initialise;
  739.   location=Forest; score = 0;
  740.  
  741.   StartDaemon(chiggers);
  742.  
  743.   "^^^^^A voice booms out ...^
  744.   Treasures have an * in their name. Say 'SCORE'^
  745.   If you need a hint on something, try 'HELP'.^";
  746. ];
  747.  
  748. [ TimePasses i;
  749.   if (location ~= Inside_Stump) rfalse;
  750.  
  751.   score=0;
  752.   objectloop (i in Inside_Stump && i ofclass Treasure)
  753.       score = score + i.depositpoints;
  754.  
  755.   if (score ~= 100) rfalse;
  756.  
  757.   deadflag=2;
  758.   "Congratulations! By finding and depositing all 13 *TREASURES*, you 
  759.    have solved Scott Adams's ~Adventureland~ and it remains only to say 
  760.    that...";
  761. ];
  762.  
  763. [ AfterLife;
  764.    if (deadflag==3) { deadflag=1; rfalse; }
  765.    remove chigger_bites; remove infected_bites;
  766.    deadflag=0; PlayerTo(Misty_Room);
  767. ];
  768.  
  769. [ PrintRank; "."; ]; 
  770.  
  771. [ DarkToDark;
  772.   if (dark_warning==0)
  773.   {   dark_warning=1; "It is now pitch dark. 
  774.                        If you proceed you will likely fall into a pit.";
  775.   }
  776.   if (random(4) == 1)
  777.   {   deadflag=1;
  778.       "You fell into a pit and broke every bone in your body!";
  779.   }
  780.   rfalse;
  781. ];
  782.  
  783. [ BunyonSub;
  784.   if (axe notin player) "Nothing happens.";
  785.   if (ox in player or location)
  786.   {   move ox to Hidden_Grove;
  787.       move axe to Hidden_Grove;
  788.       "Something you're holding vibrated and...";
  789.   }
  790.   if (player notin Quicksand)
  791.   {   move axe to Hidden_Grove;
  792.       print "Something you're holding vibrated and...";
  793.       <<Inv>>;
  794.   }
  795.   "Nothing happens.";
  796. ];
  797.  
  798. [ TsurrisSub;
  799.   if (location ~= Memory_RAM) "Nothing happens.";
  800.   "A voice booms out...^
  801.    May all your teeth but one fall out, and may that one give you toothache.^
  802.    (You can't help feeling you have stumbled on a private quarrel which is 
  803.     nothing to do with your game.)";
  804. ];
  805.  
  806. [ BurnSub;
  807.   if (flint_and_steel notin player)
  808.       "You have nothing to strike a light with.";
  809.   if (noun==gas) "Gas needs to be contained before it will burn.";
  810.   if (noun==distended_bladder)
  811.   {   if (noun in player)
  812.       {   remove noun; deadflag=1; "Gas bladder blew up in your hands!";
  813.       }
  814.       remove noun;
  815.       print "Gas bladder blew up!^";
  816.       if (dragon in location)
  817.       {   remove dragon; move gore to location;
  818.           "The dragon has been blown to bits!";
  819.       }
  820.       if (bricked_window in location)
  821.       {   remove bricked_window;
  822.           move holed_window to location; move firebricks to location;
  823.           Royal_Chamber.e_to = holed_window;
  824.           "The bricked window has been blown to bits!";
  825.       }
  826.       rtrue;
  827.   }
  828.   "That won't ignite.";
  829. ];
  830.  
  831. [ HelpSub;
  832.    print "A voice booms out...^";
  833.    print "Try:  LOOK,JUMP,SWIM,CLIMB,THROW,FIND,GO,TAKE,INVENTORY,SCORE.^";
  834.    if (chigger_bites in player || infected_bites in player)
  835.        "Medicine is good for bites.";
  836.    if (location == Quicksand) "You may need magic words here.";
  837.    if (location == Sunny_Meadow)
  838.        "Only 3 things will wake the dragon. One of them is dangerous!";
  839.    if (location == Hive)
  840.        "Read the sign in the meadow!";
  841.    if (location == Maze1 or Maze2 or Maze3
  842.        || location == Maze4 or Maze5 or Maze6)
  843.        "You may need magic words here.";
  844.    if (location == Royal_Chamber) "Blow it up. Try the swamp.";
  845. ];
  846.  
  847. [ AwaySub;
  848.   if (rug notin player || location~=Maze3) "Nothing happens.";
  849.   print "Something you're holding vibrates, and...^";
  850.   PlayerTo(Sunny_Meadow);
  851. ];
  852.  
  853. [ FindSub;
  854.   "A voice booms out...^Find it yourself.";
  855. ];
  856.  
  857. ! ----------------------------------------------------------------------------
  858. !   Grammar: the usual grammar and some extensions
  859. ! ----------------------------------------------------------------------------
  860.  
  861. Include "Grammar";
  862.  
  863. Extend "cut"
  864.                 * "up" noun                      -> Cut
  865.                 * "down" noun                    -> Cut;
  866.  
  867. Verb "bunyon"   *                                -> Bunyon;
  868. Verb "away"     *                                -> Away;
  869. Verb "tsurris"  *                                -> Tsurris;
  870. Verb "help"     *                                -> Help;
  871. Verb "find"     * special                        -> Find;
  872.  
  873. ! ----------------------------------------------------------------------------
  874.